7장. 자연언어 기초

AI 엔지니어링 선수지식 — 7장. 대상: 고등학생·학부 1년차.

7. 자연언어 기초

LLM 은 글자를 직접 못 읽어 숫자로 바꿔야 합니다. "문장 → 토큰 → 숫자 ID → 벡터(임베딩)" 이 변환 과정이 LLM 의 입구이며, EP2 의 핵심 전제입니다.

7.1 토큰화·BPE

문장을 의미 조각(토큰)으로 쪼개는 것이며, 자주 같이 나오는 글자쌍을 덩어리로 묶습니다(BPE).

비유 — 레고 분해. "안녕하세요" 를 ["안녕", "하세요"] 또는 ["안","녕","하","세","요"] 로 쪼갭니다. 자주 쓰는 덩어리일수록 한 조각이 됩니다.

직접 해보기 — 영어는 단어가 곧 토큰에 가깝지만, 한글은 글자/음절 단위로 더 잘게 쪼개집니다. "low", "lower", "lowest" 는 공통 "low" 를 한 토큰으로 묶습니다.

vocab = {"안녕": 0, "하세요": 1}   # 어휘 사전(해시!)
print([vocab[t] for t in ["안녕", "하세요"]])   # [0, 1]

실무. API 요금이 토큰 수로 매겨집니다(EP2). 한글은 영어보다 토큰이 많이 나와 같은 내용도 비용이 더 듭니다.

LLM 연결. 모든 입력의 첫 단계이며, 토큰 수가 곧 비용·컨텍스트 한도입니다(EP5 의 128K 컨텍스트 = 토큰 12.8만 개).

더 깊이Hugging Face LLM Course

7.2 임베딩 (Embedding)

토큰 ID 를 의미를 담은 벡터(1.1)로 바꾸는 것으로, 비슷한 뜻은 비슷한 방향을 가집니다.

비유 — 의미 지도. "왕 - 남자 + 여자 ≈ 여왕" 처럼, 단어를 공간의 점으로 놓으면 의미 관계가 방향·거리로 표현됩니다.

직접 해보기 — "강아지" 와 "개" 벡터는 코사인 유사도(1.4)가 높지만(가까움), "강아지" 와 "자동차" 는 낮습니다(멀음).

dog = np.array([0.9, 0.1, 0.8]); car = np.array([0.1, 0.9, 0.05])
from numpy.linalg import norm
print(round(dog @ car / (norm(dog)*norm(car)), 2))   # 0.4 (멀음)

실무. RAG·검색·추천이 전부 임베딩 유사도(1.4·벡터DB)로, "의미 검색" 의 기반입니다.

LLM 연결. 토큰 → 임베딩이 Transformer 의 입력층이며, 섹션 1(벡터)이 여기서 실제로 쓰입니다(EP2·EP3).

더 깊이Jay Alammar: Illustrated Word2vec

7.3 위치 임베딩 (Positional Embedding)

단어의 순서 정보를 벡터에 새기는 법입니다(어텐션 자체는 순서를 모르기 때문).

비유 — 좌석 번호. "철수가 영희를 좋아해" 와 "영희가 철수를 좋아해" 는 단어는 같고 순서만 다릅니다. 위치 정보 없이는 둘을 구분 못 하므로, 각 단어에 몇 번째인지 표식을 붙입니다.

직접 해보기 — 단어 집합 {철수, 영희, 좋아해} 만으로는 누가 누구를 좋아하는지 알 수 없습니다. "철수=1번, 영희=3번" 같은 위치 정보를 더해야 의미가 확정됩니다.

실무. EP5 의 RoPE·YaRN·LongRoPE 가 전부 위치 임베딩 기법으로, 긴 컨텍스트(128K)를 가능케 하는 핵심 기술입니다.

LLM 연결. EP5 전체 주제(RoPE 회전·YaRN 보정)가 위치 임베딩이며, 1.6(고유값·회전)의 직관이 여기 쓰입니다.

더 깊이Stanford CS224N · Jay Alammar Illustrated Transformer

7.4 한글 NFC 정규화

한글이 겉보기에 같아도 내부 코드가 다를 수 있어, 하나의 표준형(NFC)으로 통일하는 것입니다.

비유 — 같은 글자 다른 조립. "한" 을 완성형 1글자로 저장하느냐(NFC), ㅎ+ㅏ+ㄴ 조합으로 저장하느냐(NFD)에 따라 컴퓨터는 다른 문자열로 봅니다.

직접 해보기 — 완성형 "한글" 과 분해형(NFD) "한글" 은 겉보기엔 같아도 == 비교 시 False 입니다. NFC 정규화 후에야 True 가 됩니다.

import unicodedata
a = "한글"; b = unicodedata.normalize("NFD", a)
print(a == b, a == unicodedata.normalize("NFC", b))   # False True

실무. 맥(NFD)·윈도우(NFC) 파일명 차이, 한글 검색 버그의 단골 원인입니다. 본 youtubedu/youtubedown 도 NFC 정규화가 필수 룰입니다.

LLM 연결. 한글 토큰화·검색 정확도의 전제로, 정규화하지 않으면 같은 단어를 다른 토큰으로 처리합니다.

더 깊이Hugging Face LLM Course

7.5 정리

개념 LLM 에서의 역할
토큰화·BPE 입력 첫 단계 (비용·컨텍스트 단위)
임베딩 토큰 → 의미 벡터 (입력층)
위치 임베딩 순서 정보 (EP5 RoPE/YaRN)
NFC 정규화 한글 처리 정확도

한 문장으로, "문장 → 토큰 → ID → 임베딩(+위치)" 으로 글자를 벡터로 바꾸는 것이 LLM 의 입구이며, 섹션 1(벡터)·6(해시)이 여기서 합쳐집니다.

참고 자료Hugging Face LLM Course · Jay Alammar Illustrated Transformer · Stanford CS224N


난이도
에피소드
질문
카드를 로딩 중...
답변

클릭하거나 Space를 눌러 뒤집기

0 / 0
학습 진도 0%
이동   Space 뒤집기   R 셔플